import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

//ArrayList使用
public class Demo {
    public static void main1(String[] args) {
        //ArrayList创建的--推荐写法
        //构造一个空的列表
        List<Integer> list1 = new ArrayList<>();

        //构造一个具有10个容量的列表
        List<Integer> list2 = new ArrayList<>(10);
        list2.add(1);
        list2.add(2);
        list2.add(3);

        //list3构造好之后，与list2中的元素一致
        ArrayList<Integer> list3 = new ArrayList<>(list2);

        //避免省略类型，否则：任意类型的元素都可以存放，使用会很复杂
        List list4 = new ArrayList();
        list4.add(1);
        list4.add("1");
    }

    //ArrayList的常用方法
    public static void main2(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("JavaSE");
        list.add("JavaWeb");
        list.add("JavaEE");
        list.add("测试");
        System.out.println(list);

        //获取list中的元素个数
        System.out.println(list.size());

        //获取和设置index位置上的元素，注意index必须是介于[0，size)间
        System.out.println(list.get(1)); //面向对象中获取元素用get()，不能跟数组一样采用中括号
        list.set(1,"Java");
        System.out.println(list.get(1));

        //在index位置上插入指定元素，index及后续的元素统一往后搬移一个位置
        list.add(1,"JavaWeb");
        System.out.println(list);

        //删除指定元素，找到了就删除，该元素之后的元素统一往前搬移一个位置
        list.remove("Java");
        System.out.println(list);

        //删除list中index位置上的元素，注意index不要超过list中有效元素个数，否则会抛出下标越界异常
        list.remove(list.size()-2);
        System.out.println(list);

        //检测list中是否包含指定元素，包含返回true，否则返回false
        if(list.contains("测试")){
            list.add("测试");
        }
        System.out.println(list);

        //查找指定元素第一次出现的位置：indexOf从前往后找，lastIndexOf从后往前找
        list.add("JavaSE");
        System.out.println(list);
        System.out.println(list.indexOf("JavaSE"));
        System.out.println(list.lastIndexOf("JavaSE"));

        //使用list中[0,4)之间的元素构成一个新的ArrayList返回
        List<String> ret = list.subList(0,4);
        System.out.println(ret);

        list.clear();
        System.out.println(list.size());
    }

    //ArrayList的遍历
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        //使用下标+for遍历
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i) + " ");
        }
        System.out.println();

        //借助foreach遍历
        for (Integer integer: list) {
            System.out.print(integer + " ");
        }
        System.out.println();

        //迭代遍历
        Iterator<Integer> it = list.listIterator();
        while (it.hasNext()){
            System.out.print(it.next()+" ");
        }
        System.out.println();
    }
}
